//package com.bj58.ep.cooperate.docsws.server.handler;
//
//import com.bj58.ep.cooperate.docsws.server.context.ChannelContext;
//import com.bj58.ep.cooperate.docsws.server.context.OutMessageContainer;
//import com.bj58.ep.cooperate.docsws.server.context.SubscribeHolder;
//import com.bj58.ep.cooperate.docsws.server.entity.out.RequestMessage;
//import io.netty.channel.ChannelHandlerContext;
//import io.netty.channel.ChannelInboundHandlerAdapter;
//import io.netty.channel.ChannelOutboundHandler;
//import io.netty.channel.ChannelPromise;
//import lombok.extern.slf4j.Slf4j;
//
//import java.net.SocketAddress;
//import java.util.concurrent.Executors;
//import java.util.concurrent.ScheduledExecutorService;
//import java.util.concurrent.TimeUnit;
//
///**
// * @author lifudong
// */
//@Slf4j
//public class SendRetryHandler extends ChannelInboundHandlerAdapter implements ChannelOutboundHandler {
//
//    private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
//
//    private final OutMessageContainer messageContainer = new OutMessageContainer();
//
//    @Override
//    public void channelActive(ChannelHandlerContext ctx) throws Exception {
//        ChannelContext.setChannelOutMessageContainer(ctx.channel(), messageContainer);
//        executor.scheduleAtFixedRate(() -> {
//            messageContainer.loopDeal((requestMessage) -> {
//                if (SubscribeHolder.sendRetry(requestMessage.getBzId())) {
//                    ctx.channel().writeAndFlush(requestMessage.toWsText());
//                    log.info("【重试推送业务消息】内容：{}", requestMessage);
//                }
//            });
//        }, 5, 5, TimeUnit.SECONDS);
//    }
//
//    @Override
//    public void bind(ChannelHandlerContext channelHandlerContext, SocketAddress socketAddress, ChannelPromise channelPromise) throws Exception {
//        channelHandlerContext.bind(socketAddress, channelPromise);
//    }
//
//    @Override
//    public void connect(ChannelHandlerContext channelHandlerContext, SocketAddress socketAddress, SocketAddress socketAddress1, ChannelPromise channelPromise) throws Exception {
//        channelHandlerContext.connect(socketAddress, socketAddress1, channelPromise);
//    }
//
//    @Override
//    public void disconnect(ChannelHandlerContext channelHandlerContext, ChannelPromise channelPromise) throws Exception {
//        channelHandlerContext.disconnect(channelPromise);
//    }
//
//    @Override
//    public void close(ChannelHandlerContext channelHandlerContext, ChannelPromise channelPromise) throws Exception {
//        channelHandlerContext.close(channelPromise);
//    }
//
//    @Override
//    public void deregister(ChannelHandlerContext channelHandlerContext, ChannelPromise channelPromise) throws Exception {
//        channelHandlerContext.deregister(channelPromise);
//    }
//
//    @Override
//    public void read(ChannelHandlerContext channelHandlerContext) throws Exception {
//        channelHandlerContext.read();
//    }
//
//    @Override
//    public void write(ChannelHandlerContext channelHandlerContext, Object o, ChannelPromise channelPromise) throws Exception {
//        if (o instanceof RequestMessage) {
//            RequestMessage<?> requestMessage = (RequestMessage<?>) o;
//            messageContainer.add(requestMessage);
//            channelHandlerContext.write(requestMessage.toWsText(), channelPromise);
//        } else {
//            channelHandlerContext.write(o, channelPromise);
//        }
//    }
//
//    @Override
//    public void flush(ChannelHandlerContext channelHandlerContext) throws Exception {
//        channelHandlerContext.flush();
//    }
//}
